AutoIncBuild=0\r
MajorVer=0\r
MinorVer=2\r
-Release=15\r
+Release=16\r
Build=0\r
Debug=0\r
PreRelease=0\r
[Version Info Keys]\r
CompanyName=GPSBabel Makers\r
FileDescription=GPSBabel Windows Frontend\r
-FileVersion=0.2.15.0\r
+FileVersion=0.2.16.0\r
InternalName=\r
LegalCopyright=(C) 2005-2008 Olaf Klein (o.b.klein@gpsbabel.org)\r
LegalTrademarks=\r
interface\r
\r
uses\r
- Windows, SysUtils, Classes, Messages, Controls, StdCtrls;\r
+ Windows, SysUtils, Classes, Messages, Controls, StdCtrls, ExtCtrls;\r
\r
const\r
OTypes: array[0..6] of PChar =\r
SREG_SOURCE_FILE = 'Source:File';\r
\r
SREG_GLOBAL_LANG = 'Global:Language';\r
- \r
+\r
+ SREG_MAIN_LAYOUT = 'Main:Layout';\r
+ SREG_MAIN_WAYPOINTS = 'Main:Waypoints';\r
+ SREG_MAIN_ROUTES = 'Main:Routes';\r
+ SREG_MAIN_TRACKS = 'Main:Tracks';\r
+\r
const\r
- Profile: array[0..12] of string =\r
+ Profile: array[0..15] of string =\r
('?',\r
SREG_SOURCE_DIR,\r
SREG_SOURCE_FMT,\r
SREG_TARGET_FILE,\r
SREG_SOURCE_FILE,\r
SREG_GLOBAL_LANG,\r
- 'Main:Layout');\r
+ SREG_MAIN_LAYOUT,\r
+ SREG_MAIN_WAYPOINTS,\r
+ SREG_MAIN_ROUTES,\r
+ SREG_MAIN_TRACKS\r
+ );\r
\r
const\r
GPSBabel_Domain = 'gpsbabel';\r
\r
type\r
- PFileInfo = ^TFileInfo;\r
- TFileInfo = record\r
- Descr: string;\r
- Ext: string;\r
+ TCapability = class\r
+ protected\r
+ FName : String;\r
+ FDescription : string;\r
+ FExt: string;\r
internal: string;\r
+ Furl: PChar;\r
+ protected\r
+ function CanReadAny : Boolean;\r
+ function CanWriteAny : Boolean;\r
+ function FIsDevice : Boolean;\r
+ function FIsFile : Boolean;\r
+ public\r
Capas: Integer;\r
- url: PChar;\r
+ property Name : String read FName;\r
+ property Description : String read FDescription;\r
+ property Ext : String read FExt;\r
+ property ReadAny : Boolean read CanReadAny;\r
+ property WriteAny : Boolean read CanWriteAny;\r
+ property IsDevice : Boolean read FIsDevice;\r
+ property IsFile : Boolean read FIsFile;\r
end;\r
\r
type\r
+ TOptionEdit = class;\r
+\r
TOption = record\r
format: string;\r
name: string;\r
defname: string;\r
otype: Byte;\r
def: PChar; // default value from gpsbabel or ini-file\r
- gbdef: PChar; // default value from gpsbabel \r
+ gbdef: PChar; // default value from gpsbabel\r
min: PChar;\r
max: PChar;\r
chb: TCheckBox;\r
- edit: TControl;\r
+ edit: TOptionEdit;\r
dir: Byte; // 1 = only in; 2 = only out\r
end;\r
POption = ^TOption;\r
\r
-type\r
+ TOptionEdit = class(TObject)\r
+ protected\r
+ FOption : POption;\r
+ function GetValue : String; virtual; abstract;\r
+ procedure SetValue(Value : String); virtual; abstract;\r
+ function GetEnabled : Boolean; virtual; abstract;\r
+ procedure SetEnabled(Value : Boolean); virtual; abstract;\r
+ public\r
+ property Value : String read GetValue write SetValue;\r
+ property Option : POption read FOption;\r
+ property Enabled : Boolean read GetEnabled write SetEnabled;\r
+ end;\r
+\r
TCapabilities = class;\r
\r
TOptions = class(TStringList)\r
constructor Create(ACapabilities: TCapabilities);\r
procedure AddOptionLine(const ALine: string);\r
procedure DebugGetHints(List: TStringList);\r
- function FormatOpts(const Descr: string): TStringList;\r
- function HasFormatOpts(const Format: string): Boolean;\r
+ function FormatOpts(const Descr: string): TStringList; overload;\r
+ function FormatOpts(cap : TCapability): TStringList; overload;\r
+ function HasFormatOpts(const Format: string): Boolean; overload;\r
+ function HasFormatOpts(cap : TCapability): Boolean; overload;\r
property\r
List: TStrings read GetList write SetList;\r
end;\r
function GetList: TStrings;\r
procedure SetList(const Value: TStrings);\r
public\r
- function CanReadAny(Index: Integer): Boolean;\r
- function CanWriteAny(Index: Integer): Boolean;\r
- function GetDescr(Index: Integer): string;\r
- function GetExt(const Descr: string): string;\r
- function GetCaps(const Descr: string): Integer;\r
- function GetName(const Descr: string): string;\r
- function IsDevice(Index: Integer): Boolean;\r
- function IsFile(Index: Integer): Boolean;\r
- property\r
- List: TStrings read GetList write SetList;\r
+ function GetCapabilityByName(const Descr: string): TCapability;\r
+ function GetCapability(Index: Integer) : TCapability;\r
+\r
+ property List: TStrings read GetList write SetList;\r
+ property Capability[Index : Integer] : TCapability read GetCapability;\r
end;\r
\r
type\r
var\r
i: Integer;\r
s: string;\r
+ cap : TCapability;\r
begin\r
- s := FCaps.GetName(Descr);\r
- if (s <> '') and Self.Find(s, i) then\r
+ cap:=FCaps.GetCapabilityByName(Descr);\r
+ result:=FormatOpts(cap);\r
+end;\r
+\r
+function TOptions.FormatOpts(cap : TCapability): TStringList;\r
+var\r
+ i: Integer;\r
+ s: string;\r
+begin\r
+ if (Assigned(Cap)) and Self.Find(Cap.Name, i) then\r
Result := TStringList(Self.Objects[i])\r
else\r
Result := nil;\r
Result := (FormatOpts(Format) <> nil);\r
end;\r
\r
+function TOptions.HasFormatOpts(cap : TCapability): Boolean;\r
+begin\r
+ Result := (FormatOpts(cap) <> nil);\r
+end;\r
+\r
procedure TOptions.SetList(const Value: TStrings);\r
var\r
i: Integer;\r
name: string;\r
internal: string;\r
caps: Integer;\r
- info: PFileInfo;\r
+ info: TCapability;\r
\r
begin\r
StrPCopy(buff, Line);\r
StrCat(buff, #9);\r
+ //OutputDebugString(buff);\r
\r
cin := @buff;\r
index := 0;\r
1:\r
scaps := StrPas(cin);\r
2:\r
- name := StrPas(cin);\r
+ name := StrPas(cin);\r
3:\r
ext := StrPas(cin);\r
- else\r
- begin\r
- comment := StrPas(cin);\r
- if (Length(comment) = 0) or (Length(name) = 0) then break;\r
- \r
-// if (comment[1] = '?') then break;\r
- \r
- caps := 0;\r
- for i := 1 to Length(scaps) do\r
- if (scaps[i] <> '-') then caps := caps or (1 shl (i - 1));\r
-\r
- New(info);\r
- info.Descr := comment;\r
- info.Ext := ext;\r
- info.internal := internal;\r
- info.Capas := caps;\r
-\r
- i := SELF.Add(name);\r
- SELF.PutObject(i, Pointer(info));\r
-\r
- if (name = 'garmin_txt') then\r
- begin\r
- gpsbabel_knows_inifile := True;\r
- // add -p "" to command-line\r
- end\r
- else if (name = 'xcsv') then\r
- info.internal := 'file';\r
- break;\r
- end;\r
+ else begin\r
+ comment := StrPas(cin);\r
+ if (Length(comment) = 0) or (Length(name) = 0) then break;\r
+\r
+// if (comment[1] = '?') then break;\r
+\r
+ caps := 0;\r
+ for i := 1 to Length(scaps) do\r
+ if (scaps[i] <> '-') then caps := caps or (1 shl (i - 1));\r
+\r
+ info:=TCapability.Create;\r
+ info.FName:=name;\r
+ info.FDescription := comment;\r
+ info.FExt := ext;\r
+ info.internal := internal;\r
+ info.Capas := caps;\r
+\r
+ SELF.AddObject(name,info);\r
+\r
+ if (name = 'garmin_txt') then\r
+ begin\r
+ gpsbabel_knows_inifile := True;\r
+ // add -p "" to command-line\r
+ end\r
+ else if (name = 'xcsv') then\r
+ info.internal := 'file';\r
+ break;\r
+ end;\r
end;\r
\r
index := index + 1;\r
end;\r
end;\r
\r
-function TCapabilities.CanReadAny(Index: Integer): Boolean;\r
-var\r
- caps: Integer;\r
+function TCapability.FIsDevice : Boolean;\r
begin\r
- caps := PFileInfo(SELF.Objects[Index]).Capas;\r
- Result := caps and (1 or 4 or 16) <> 0;\r
+ Result := (AnsiCompareText(Internal, 'serial') = 0);\r
end;\r
\r
-function TCapabilities.CanWriteAny(Index: Integer): Boolean;\r
-var\r
- caps: Integer;\r
+function TCapability.FIsFile : Boolean;\r
begin\r
- caps := PFileInfo(SELF.Objects[Index]).Capas;\r
- Result := caps and (2 or 8 or 32) <> 0;\r
+ Result := (AnsiCompareText(Internal, 'file') = 0);\r
end;\r
\r
-function TCapabilities.GetCaps(const Descr: string): Integer;\r
-var\r
- info: PFileInfo;\r
- i: Integer;\r
+function TCapability.CanReadAny : Boolean;\r
begin\r
- for i := 0 to Count - 1 do\r
- begin\r
- info := PFileInfo(Objects[i]);\r
- if (AnsiCompareText(info.Descr, Descr) = 0) then\r
- begin\r
- Result := info.Capas;\r
- Exit;\r
- end;\r
- end;\r
- Result := 0;\r
+ Result := capas and (1 or 4 or 16) <> 0;\r
end;\r
\r
-function TCapabilities.GetDescr(Index: Integer): string;\r
-var\r
- info: PFileInfo;\r
+function TCapability.CanWriteAny : Boolean;\r
begin\r
- info := PFileInfo(Objects[Index]);\r
- Result := info.Descr;\r
-end;\r
-\r
-function TCapabilities.GetExt(const Descr: string): string;\r
-var\r
- i: Integer;\r
- info: PFileInfo;\r
-begin\r
- for i := 0 to Count - 1 do\r
- begin\r
- info := PFileInfo(Objects[i]);\r
- if (AnsiCompareText(info.Descr, Descr) = 0) then\r
- begin\r
- Result := info.Ext;\r
- Exit;\r
- end;\r
- end;\r
- Result := '.*';\r
+ Result := capas and (2 or 8 or 32) <> 0;\r
end;\r
\r
function TCapabilities.GetList: TStrings;\r
Result := TStringList.Create;\r
end;\r
\r
-function TCapabilities.GetName(const Descr: string): string;\r
+function TCapabilities.GetCapabilityByName(const Descr: string): TCapability;\r
var\r
i: Integer;\r
- info: PFileInfo;\r
+ info: TCapability;\r
begin\r
for i := 0 to Count - 1 do\r
begin\r
- info := PFileInfo(Objects[i]);\r
- if (AnsiCompareText(info.Descr, Descr) = 0) then\r
+ info := TCapability(Objects[i]);\r
+ if (AnsiCompareText(info.Description, Descr) = 0) then\r
begin\r
- Result := SELF[i];\r
+ Result := info;\r
Exit;\r
end;\r
end;\r
- Result := 'unknown';\r
+ Result := nil;\r
end;\r
\r
-function TCapabilities.IsDevice(Index: Integer): Boolean;\r
-var\r
- info: PFileInfo;\r
+function TCapabilities.GetCapability(Index: Integer) : TCapability;\r
begin\r
- info := PFileInfo(Objects[Index]);\r
- Result := (AnsiCompareText(info.Internal, 'serial') = 0);\r
+ Result := TCapability(Objects[Index]);\r
end;\r
\r
-function TCapabilities.IsFile(Index: Integer): Boolean;\r
-var\r
- info: PFileInfo;\r
- name: string;\r
-begin\r
- info := PFileInfo(Objects[Index]);\r
- Result := (AnsiCompareText(info.Internal, 'file') = 0);\r
-end;\r
\r
procedure TCapabilities.SetList(const Value: TStrings);\r
var\r
function GetStrProp(Instance: TObject; Info: PPropInfo): string; overload;\r
procedure SetStrProp(Instance: TObject; const Name, Value: string); overload;\r
procedure SetStrProp(Instance: TObject; Info: PPropInfo; const Value: string); overload;\r
+\r
+function StrToBool(const str: string): Boolean;\r
+function BoolToStr(const b: Boolean; UseStrings: Boolean): string;\r
{$ENDIF}\r
\r
implementation\r
TypInfo.SetStrProp(Instance, Info, Value);\r
end;\r
\r
+\r
+function StrToBool(const str: string): Boolean;\r
+begin\r
+ Result := (str = '1') or (LowerCase(str) = 'true') or (LowerCase(str) = 'ja')\r
+end;\r
+\r
+function BoolToStr(const b: Boolean; UseStrings: Boolean): string;\r
+const\r
+ Values: array[Boolean] of Char = ('0', '1');\r
+ SValues: array[Boolean] of string = ('false', 'true');\r
+begin\r
+ if UseStrings then\r
+ Result := SValues[b]\r
+ else\r
+ Result := Values[b];\r
+end;\r
{$ENDIF}\r
\r
end.\r
procedure PopupMenuPopup(Sender: TObject);\r
procedure acOptionsSynthesizeShortNamesExecute(Sender: TObject);\r
procedure acOptionsNukeTypesExecute(Sender: TObject);\r
+ procedure cbInputFormatExit(Sender: TObject);\r
+ procedure cbOutputFormatExit(Sender: TObject);\r
private\r
{ Private-Deklarationen }\r
FCaps: TCapabilities;\r
FFmtIn, FFmtOut: string;\r
procedure AddToOutput(const Str: string);\r
procedure AddToOutputFmt(const Format: string; const Args: array of const);\r
- procedure ComboBoxChanged(const Format: string; IsInput, IsFile: Boolean);\r
+ procedure ComboBoxChanged(Source : TComboBox; IsInput, IsFile: Boolean);\r
procedure DoOnIdle(Sender: TObject; var Done: Boolean);\r
procedure EnableOptions(const Version: string);\r
function HandleOptions(const Format: string; AObject: TObject; IsInput: Boolean): Boolean;\r
cbInputLang.ItemIndex := 0;\r
cbOutputLang.ItemIndex := 0;\r
\r
+ cbWaypoints.Checked := StrToBool(ReadProfile(cbWaypoints.Tag));\r
+ cbTracks.Checked := StrToBool(ReadProfile(cbTracks.Tag));\r
+ cbRoutes.Checked := StrToBool(ReadProfile(cbRoutes.Tag));\r
+\r
+ acCopySelected.Enabled := False;\r
+ acSelectAll.Enabled := False;\r
+ \r
Application.OnIdle := Self.DoOnIdle;\r
\r
RefreshDesign(True);\r
i: Integer;\r
OK: Boolean;\r
s: string;\r
+ cap : TCapability;\r
begin\r
for i := 0 to FCaps.Count - 1 do\r
begin\r
- if (ForDevice and not(FCaps.IsDevice(i))) then Continue;\r
- if not(ForDevice) and not FCaps.IsFile(i) then Continue;\r
+ cap:=FCaps.Capability[i];\r
+ if (ForDevice and not cap.IsDevice) then Continue;\r
+ if not(ForDevice) and not cap.IsFile then Continue;\r
\r
if (IsInput) then\r
- OK := FCaps.CanReadAny(i)\r
+ OK := Cap.ReadAny\r
else\r
- OK := FCaps.CanWriteAny(i);\r
+ OK := Cap.WriteAny;\r
if OK then\r
- Target.Items.Add(FCaps.GetDescr(i));\r
+ Target.Items.AddObject(Cap.Description, Cap);\r
end;\r
\r
s := ReadProfile(Target.Tag);\r
ComboBoxSelect(Target, s);\r
\r
- ComboBoxChanged(Target.Text, IsInput, not(ForDevice));\r
+ ComboBoxChanged(Target, IsInput, not(ForDevice));\r
end;\r
\r
procedure TfrmMain.OpenButtonClick(Sender: TObject);\r
var\r
- s: string;\r
+ s,ext: string;\r
i: Integer;\r
+ cap : TCapability;\r
begin\r
dlgFileOpen.Filter := '';\r
dlgFileOpen.DefaultExt := '*.*';\r
\r
- if (cbInputFormat.Text <> '') then\r
- s := cbInputFormat.Text + '|*.' + FCaps.GetExt(cbInputFormat.Text) + '|';\r
- s := s + _('All files|*.*');\r
+ s:='';\r
+ if (cbInputFormat.ItemIndex <> -1 ) then begin\r
+ cap:= TCapability(cbInputFormat.Items.Objects[cbInputFormat.ItemIndex]);\r
+ ext := cap.Ext;\r
+ if (Length(ext)>0) then\r
+ s := cbInputFormat.Text + '|*.' + ext + '|';\r
+ end;\r
+ s := s + _('All files (*.*)|*.*');\r
\r
dlgFileOpen.Filter := s;\r
if not SELF.dlgFileOpen.Execute then Exit;\r
CheckInput;\r
end;\r
\r
-procedure TfrmMain.ComboBoxChanged(const Format: string; IsInput, IsFile: Boolean);\r
+procedure TfrmMain.ComboBoxChanged(Source : TComboBox; IsInput, IsFile: Boolean);\r
var\r
caps: Integer;\r
ext: string;\r
ac: TAction;\r
+ capability : TCapability;\r
begin\r
- caps := FCaps.GetCaps(Format);\r
- ext := FCaps.GetExt(Format);\r
+ if (Source.ItemIndex<0) then exit;\r
+ capability:=TCapability(Source.Items.Objects[Source.ItemIndex]);\r
+ ext := capability.Ext;\r
if IsFile and FOutHandmade and (ext = '') then\r
begin\r
ext := SysUtils.ExtractFileExt(edOutputFile.Text);\r
if (ext <> '') and (ext[1] = '.') then Delete(ext, 1, 1);\r
end;\r
\r
+ caps := capability.Capas;\r
if IsInput then\r
begin\r
- FFmtIn := Format;\r
+ FFmtIn := capability.Name;\r
wptInputOK.Enabled := (caps and 1 <> 0);\r
trkInputOK.Enabled := (caps and 4 <> 0);\r
rteInputOK.Enabled := (caps and 16 <> 0);\r
end\r
else\r
begin\r
- FFmtOut := Format;\r
+ FFmtOut := capability.Name;\r
wptOutputOK.Enabled := (caps and 2 <> 0);\r
trkOutputOK.Enabled := (caps and 8 <> 0);\r
rteOutputOK.Enabled := (caps and 32 <> 0);\r
edInputOpts.Items.Clear;\r
\r
ac := acOptionsSourceFormat;\r
- acOptionsSourceFormat.Caption := _('Input') + ': ' + Format;\r
+ acOptionsSourceFormat.Caption := _('Input') + ': ' + capability.Name;\r
btnInputOpts.Caption := '';\r
end\r
else begin\r
edOutputOpts.Items.Clear;\r
\r
ac := acOptionsTargetFormat;\r
- acOptionsTargetFormat.Caption := _('Output') + ': ' + Format;\r
+ acOptionsTargetFormat.Caption := _('Output') + ': ' + capability.Name;\r
btnOutputOpts.Caption := '';\r
end;\r
\r
- ac.Enabled := FOpts.HasFormatOpts(Format);\r
+ ac.Enabled := FOpts.HasFormatOpts(capability);\r
if ac.Enabled then\r
begin\r
- ac.Hint := SysUtils.Format(_('Select and edit options for "%s"'), [Format]);\r
+ ac.Hint := SysUtils.Format(_('Select and edit options for "%s"'), [capability.Name]);\r
end\r
else\r
begin\r
- ac.Hint := SysUtils.Format(_('No options available for "%s"'), [Format]);\r
+ ac.Hint := SysUtils.Format(_('No options available for "%s"'), [capability.Name]);\r
end;\r
end;\r
\r
procedure TfrmMain.sbSaveFileClick(Sender: TObject);\r
var\r
s: string;\r
+ cap : TCapability;\r
begin\r
dlgFileSave.Filter := '';\r
dlgFileSave.DefaultExt := '*.*';\r
\r
- if (cbOutputFormat.Text <> '') then\r
- s := cbOutputFormat.Text + '|*.' + FCaps.GetExt(cbOutputFormat.Text) + '|';\r
+ s:='';\r
+ if (cbOutputFormat.ItemIndex <> -1) then begin\r
+ cap:=FCaps.Capability[cbOutputFormat.ItemIndex];\r
+ s := Format('%s|%s',[cbOutputFormat.Text,cap.Ext,cap.Ext]);\r
+ end;\r
s := s + _('All files|*.*');\r
\r
dlgFileSave.Filter := s;\r
IFormat, OFormat, IFiles: string;\r
Fatal: Boolean;\r
sp: PChar;\r
-\r
+ cap : TCapability;\r
begin\r
acLetsGo.Enabled := False;\r
try\r
if gpsbabel_knows_inifile then cmdline := '-p ""';\r
\r
if chbInputDevice.Checked then\r
- IFormat := FCaps.GetName(cbInputFormatDevice.Text)\r
+ cap:= TCapability(cbInputFormatDevice.Items.Objects[cbInputFormatDevice.ItemIndex])\r
else\r
- IFormat := FCaps.GetName(cbInputFormat.Text);\r
+ cap:= TCapability(cbInputFormat.Items.Objects[cbInputFormat.ItemIndex]);\r
+ IFormat :=cap.Name;\r
+\r
if chbOutputDevice.Checked then\r
- OFormat := FCaps.GetName(cbOutputFormatDevice.Text)\r
+ cap:= TCapability(cbOutputFormatDevice.Items.Objects[cbOutputFormatDevice.ItemIndex])\r
else\r
- OFormat := FCaps.GetName(cbOutputFormat.Text);\r
-\r
+ cap:= TCapability(cbOutputFormat.Items.Objects[cbOutputFormat.ItemIndex]);\r
+ OFormat := cap.Name;\r
if cbWaypoints.Checked then cmdline := cmdline + ' -w';\r
if cbRoutes.Checked then cmdline := cmdline + ' -r';\r
if cbTracks.Checked then cmdline := cmdline + ' -t';\r
StoreProfile(cbOutputDevice.Tag, cbOutputDevice.Text);\r
StoreProfile(cbOutputFormatDevice.Tag, cbOutputFormatDevice.Text);\r
StoreProfile(edInputFile.Tag, edInputFile.Text);\r
- StoreProfile(edOutputFile.Tag, edOutputFile.Text);\r
+ StoreProfile(cbWayPoints.Tag, BoolToStr(cbWayPoints.Checked,true));\r
+ StoreProfile(cbRoutes.Tag, BoolToStr(cbRoutes.Checked,true));\r
+ StoreProfile(cbTracks.Tag, BoolToStr(cbTracks.Checked,true));\r
end;\r
\r
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);\r
cbOutputFormat.Visible := True;\r
sbSaveFile.Visible := True;\r
edOutputFile.Visible := True;\r
- cbOutputDevice.Visible := False;\r
+ cbOutputDevice.Visible := False;\r
cbOutputFormatDevice.Visible := False;\r
lbOutputFile.Caption := _('File');\r
FFmtOut := cbOutputFormat.Text;\r
\r
procedure TfrmMain.cbInputFormatDeviceChange(Sender: TObject);\r
begin\r
- ComboBoxChanged(cbInputFormatDevice.Text, True, False);\r
+ ComboBoxChanged(cbInputFormatDevice, True, False);\r
+end;\r
+\r
+procedure TfrmMain.cbInputFormatExit(Sender: TObject);\r
+begin\r
+ if (cbInputFormat.ItemIndex=-1) then cbInputFormat.ItemIndex:=0;\r
end;\r
\r
procedure TfrmMain.cbOutputFormatDeviceChange(Sender: TObject);\r
begin\r
- ComboBoxChanged(cbOutputFormatDevice.Text, False, False);\r
+ ComboBoxChanged(cbOutputFormatDevice, False, False);\r
+end;\r
+\r
+procedure TfrmMain.cbOutputFormatExit(Sender: TObject);\r
+begin\r
+ if (cbOutputFormat.ItemIndex=-1) then cbOutputFormat.ItemIndex:=0;\r
end;\r
\r
procedure TfrmMain.cbInputFormatChange(Sender: TObject);\r
begin\r
- ComboBoxChanged(cbInputFormat.Text, True, True);\r
+ ComboBoxChanged(cbInputFormat, True, True);\r
end;\r
\r
procedure TfrmMain.cbOutputFormatChange(Sender: TObject);\r
begin\r
- ComboBoxChanged(cbOutputFormat.Text, False, True);\r
+ ComboBoxChanged(cbOutputFormat, False, True);\r
end;\r
\r
procedure TfrmMain.acOptionsSourceFormatExecute(Sender: TObject);\r
_translate(GPSBabel_Domain, MsgID) + '"');\r
end;\r
\r
+var\r
+ cap : TCapability;\r
+\r
begin\r
if not SelectLanguage(\r
_('Choose language') + ' ' + _('for export'),\r
\r
for i := 0 to FCaps.Count - 1 do\r
begin\r
- if not FCaps.IsFile(i) then Continue;\r
+ cap:=FCaps.Capability[i];\r
+ if not Cap.IsFile then Continue;\r
\r
- s := FCaps.GetDescr(i);\r
- UniWrite(f, Format('format:%s,', [FCaps.GetName(s)]));\r
+ s := Cap.Description;\r
+ UniWrite(f, Format('format:%s,', [Cap.Name]));\r
UniWriteLn(f, '"' + s + '","' + _translate(GPSBabel_Domain, s) + '"');\r
\r
l := FOpts.FormatOpts(s);\r
begin\r
memoOutput.SetFocus;\r
memoOutput.SelectAll;\r
+ acSelectAll.Enabled := False;\r
end;\r
\r
procedure TfrmMain.acCopySelectedExecute(Sender: TObject);\r
begin\r
memoOutput.SetFocus;\r
memoOutput.CopyToClipboard;\r
+ acCopySelected.Enabled := False;\r
end;\r
\r
procedure TfrmMain.PopupMenuPopup(Sender: TObject);\r
pmnuCopySelected.Caption := dgettext('delphi', pmnuCopySelected.Caption);\r
pmnuClearOutput.Caption := dgettext('delphi', pmnuClearOutput.Caption);\r
\r
- pmnuSelectAll.Enabled := (memoOutput.Lines.Count > 0);\r
- pmnuCopySelected.Enabled := (memoOutput.Lines.Count > 0);\r
+ acSelectAll.Enabled := (memoOutput.Lines.Count > 0);\r
+ acCopySelected.Enabled := (memoOutput.Lines.Count > 0);\r
+\r
pmnuClearOutput.Enabled := (memoOutput.Lines.Count > 0);\r
end;\r
\r
FOpts: TStringList;\r
FCanvas: TCanvas;\r
FInitialOpts: string;\r
- procedure CreateStringOption(const x, y, tag: Integer; o: POption; xmax: Integer = -1);\r
procedure CreateIntegerOption(const x, y, tag: Integer; o: POption; xmax: Integer = -1);\r
- procedure CreateFileOption(const x, y, tag: Integer; o: POption; IsInput: Boolean; xmax: Integer = -1);\r
function FindUpDown(AControl: TControl): TUpDown;\r
function GetOptsStr: string;\r
- procedure OptionOpenFile(Sender: TObject);\r
- procedure OptionSaveFile(Sender: TObject);\r
function ParseOptsLine(const Line: string; List: TStrings): Integer;\r
procedure SetOpts(AList: TStringList);\r
procedure SetOptsStr(const AValue: string);\r
FFormat: string;\r
FIsInput: Boolean;\r
constructor Create(AOwner: TComponent); override;\r
+ destructor Destroy; override;\r
property\r
Opts: TStringList read FOpts write SetOpts;\r
property OptsStr: string read GetOptsStr write SetOptsStr;\r
end;\r
\r
+ TIntegerEdit = class(TOptionEdit)\r
+ protected\r
+ ed: TEdit;\r
+ up: TUpDown;\r
+ max, min : Integer;\r
+ function GetValue : String; override;\r
+ procedure SetValue(Value : String); override;\r
+ function GetEnabled : Boolean; override;\r
+ procedure SetEnabled(value : Boolean); override;\r
+ procedure UpDownClick(Sender: TObject; Button: TUDBtnType);\r
+ function GetIntValue : Integer;\r
+ procedure SetIntValue(Value : Integer);\r
+ public\r
+ constructor Create(Form : TForm; Parent : TWinControl; AOption : POption; const x,y : Integer);\r
+ end;\r
+\r
+ TIntegerSelectEdit = class(TOptionEdit)\r
+ protected\r
+ combo: TComboBox;\r
+ min : Integer;\r
+ function GetValue : String; override;\r
+ procedure SetValue(Value : String); override;\r
+ function GetEnabled : Boolean; override;\r
+ procedure SetEnabled(value : Boolean); override;\r
+ public\r
+ constructor Create(Form : TForm; Parent : TWinControl; AOption : POption; const x,y,xmax : Integer);\r
+ end;\r
+\r
+ TStringEdit = class(TOptionEdit)\r
+ protected\r
+ ed: TEdit;\r
+ function GetValue : String; override;\r
+ procedure SetValue(Value : String); override;\r
+ function GetEnabled : Boolean; override;\r
+ procedure SetEnabled(value : Boolean); override;\r
+ public\r
+ constructor Create(Form : TForm; Parent : TWinControl; AOption : POption; const x,y : Integer);\r
+ end;\r
+\r
+ TFileEdit = class(TOptionEdit)\r
+ protected\r
+ ed: TEdit;\r
+ btn: TSpeedButton;\r
+ FForm : TfrmOptions;\r
+ FIsInput : Boolean;\r
+ function GetValue : String; override;\r
+ procedure SetValue(Value : String); override;\r
+ function GetEnabled : Boolean; override;\r
+ procedure SetEnabled(value : Boolean); override;\r
+ procedure OpenFile(Sender: TObject);\r
+ procedure SaveFile(Sender: TObject);\r
+ public\r
+ constructor Create(AForm : TfrmOptions; Parent : TWinControl; AOption : POption;\r
+ const x,y : Integer; AIsInput: Boolean; xmax: Integer = -1);\r
+ end;\r
+\r
type\r
eUnknownOption = class(Exception);\r
eParserError = class(Exception);\r
- \r
+\r
var\r
frmOptions: TfrmOptions;\r
\r
end;\r
end;\r
\r
+constructor TIntegerEdit.Create;\r
+begin\r
+ FOption:=AOption;\r
+ ed:=TEdit.Create(form);\r
+ ed.Parent:=Parent;\r
+ up:=TUpDown.Create(form);\r
+ up.Parent:=Parent;\r
+\r
+ // The following initialization will allow users\r
+ // to decrease or increase max 16383 times before\r
+ // TUpDown blocks - if a user will every reach that limit?\r
+ up.Min := 0;\r
+ up.Max := MAXSHORT;\r
+ up.Position:=MAXSHORT DIV 2;\r
+\r
+ ed.Left := x;\r
+ ed.Top := y;\r
+\r
+ ed.Width := ed.Width - up.Width;\r
+ up.Left := ed.Left + ed.Width;\r
+ up.Top := ed.Top;\r
+\r
+ if (Option.min <> nil) then\r
+ min := StrToInt(Option.min)\r
+ else\r
+ min := -(MAXLONG-1);\r
+ if (Option.max <> nil) then\r
+ max := StrToInt(Option.max)\r
+ else\r
+ max := MAXLONG;\r
+ if (Option.def <> nil) then\r
+ Value:=Option.def;\r
+ up.OnClick:=UpDownClick;\r
+end;\r
+\r
+procedure TIntegerEdit.UpDownClick(Sender: TObject; Button: TUDBtnType);\r
+begin\r
+ if (Button = btNext) then\r
+ SetIntValue(GetIntValue+1)\r
+ else\r
+ SetIntValue(GetIntValue-1);\r
+end;\r
+\r
+procedure TIntegerEdit.SetIntValue(Value : Integer);\r
+begin\r
+ if (Value <min) or (value >max) then exit;\r
+ ed.Text:=InttoStr(Value);\r
+end;\r
+\r
+function TIntegerEdit.GetIntValue : Integer;\r
+begin\r
+ Result:=StrToIntDef(ed.Text,0);\r
+end;\r
+\r
+function TIntegerEdit.GetValue : String;\r
+begin\r
+ Result:=InttoStr(GetIntValue);\r
+end;\r
+\r
+procedure TIntegerEdit.SetValue(Value : String);\r
+begin\r
+ SetIntValue(StrToIntDef(value,Min));\r
+end;\r
+\r
+function TIntegerEdit.GetEnabled : Boolean;\r
+begin\r
+ result:=ed.Enabled;\r
+end;\r
+\r
+procedure TIntegerEdit.SetEnabled(value : Boolean);\r
+begin\r
+ ed.Enabled:=Value;\r
+ up.Enabled:=Value;\r
+end;\r
+\r
+//*******************************************++\r
+\r
+constructor TIntegerSelectEdit.Create;\r
+Var\r
+ I : Integer;\r
+begin\r
+ FOption:=AOption;\r
+ Combo := TComboBox.Create(Form);\r
+ Combo.Left := x;\r
+ Combo.Top := y;\r
+ if (Combo.Left + Combo.Width < xmax) then\r
+ Combo.Left := xmax - Combo.Width;\r
+ Combo.Parent := Parent;\r
+ min:=StrToInt(Option.min);\r
+ for i := min to StrToInt(Option.max) do\r
+ Combo.Items.Add(IntToStr(i));\r
+ if (Option.def <> nil) then\r
+ Combo.Text := Option.def\r
+ else\r
+ Combo.ItemIndex := 0;\r
+end;\r
+\r
+function TIntegerSelectEdit.GetValue : String;\r
+begin\r
+ Result:=InttoStr(Min + Combo.ItemIndex);\r
+end;\r
+\r
+procedure TIntegerSelectEdit.SetValue(Value : String);\r
+Var\r
+ I : Integer;\r
+begin\r
+ I:=StrToIntDef(Value,Min);\r
+ I:=I-Min;\r
+ Combo.ItemIndex:=I;\r
+end;\r
+\r
+function TIntegerSelectEdit.GetEnabled : Boolean;\r
+begin\r
+ Result:=Combo.Enabled;\r
+end;\r
+\r
+procedure TIntegerSelectEdit.SetEnabled(value : Boolean);\r
+begin\r
+ Combo.Enabled:=Value;\r
+end;\r
+\r
+constructor TStringEdit.Create;\r
+begin\r
+ FOption:=AOption;\r
+ ed := TEdit.Create(form);\r
+ ed.Left := x;\r
+ ed.Top := y;\r
+ if (Option.def <> nil) then\r
+ Value := string(Option.def);\r
+ ed.Parent := Parent;\r
+end;\r
+\r
+function TStringEdit.GetValue : String;\r
+begin\r
+ Result:=ed.Text;\r
+end;\r
+\r
+procedure TStringEdit.SetValue(Value : String);\r
+begin\r
+ ed.Text:=Value;\r
+end;\r
+\r
+function TStringEdit.GetEnabled : Boolean;\r
+begin\r
+ Result:=ed.Enabled;\r
+end;\r
+\r
+procedure TStringEdit.SetEnabled(value : Boolean);\r
+begin\r
+ ed.Enabled:=Value;\r
+end;\r
+\r
+constructor TFileEdit.Create;\r
+begin\r
+ FOption:=AOption;\r
+ FForm:=AForm;\r
+ FIsInput:=AIsInput;\r
+ ed := TEdit.Create(FForm);\r
+\r
+ ed.Left := x;\r
+ ed.Top := y;\r
+ ed.Parent := Parent;\r
+\r
+ btn := TSpeedButton.Create(FForm);\r
+ btn.Parent := Parent;\r
+ ed.Width := ed.Width - btn.Width;\r
+ btn.Left := ed.Left + ed.Width;\r
+ btn.Top := ed.top;\r
+\r
+ if FIsInput then begin\r
+ frmMain.ImageList1.GetBitmap(15, btn.Glyph);\r
+ btn.OnClick := OpenFile;\r
+ end else begin\r
+ frmMain.ImageList1.GetBitmap(17, btn.Glyph);\r
+ btn.OnClick := SaveFile;\r
+ end;\r
+end;\r
+\r
+procedure TFileEdit.OpenFile(Sender: TObject);\r
+var\r
+ d: TOpenDialog;\r
+begin\r
+ d := TOpenDialog.Create(FForm);\r
+ try\r
+ d.FileName := Value;\r
+ if d.Execute then\r
+ Value:=d.FileName;\r
+ finally\r
+ d.Free;\r
+ end;\r
+end;\r
+\r
+procedure TFileEdit.SaveFile(Sender: TObject);\r
+var\r
+ d: TSaveDialog;\r
+begin\r
+ d := TSaveDialog.Create(FForm);\r
+ try\r
+ d.FileName := Value;\r
+ if d.Execute then\r
+ Value:=d.FileName;\r
+ finally\r
+ d.Free;\r
+ end;\r
+end;\r
+\r
+function TFileEdit.GetEnabled : Boolean;\r
+begin\r
+ Result:=ed.Enabled;\r
+end;\r
+\r
+procedure TFileEdit.SetEnabled(value : Boolean);\r
+begin\r
+ ed.Enabled:=Value;\r
+ btn.Enabled:=Value;\r
+end;\r
+\r
+function TFileEdit.GetValue : String;\r
+begin\r
+ Result:=ed.Text;\r
+end;\r
+\r
+procedure TFileEdit.SetValue(Value : String);\r
+begin\r
+ ed.Text:=value;\r
+end;\r
+\r
{ TfrmOptions }\r
\r
constructor TfrmOptions.Create(AOwner: TComponent); // override;\r
o.chb := chb;\r
chb.Name := '___' + o.name;\r
chb.OnClick := CheckBoxClicked;\r
- chb.Tag := i + 1;\r
+ chb.Tag := i;\r
\r
InsertComponent(chb);\r
\r
chb.AllowGrayed := True;\r
chb.State := cbGrayed;\r
end;\r
+ if (Assigned(o.edit)) and (chb.checked) then\r
+ o.edit.Enabled:=True;\r
end;\r
\r
xy.y := 8;\r
// ('unknown', 'integer', 'float', 'string', 'boolean', 'file', 'outfile');\r
case o.otype of\r
1: CreateIntegerOption(xy.X, xy.Y - 2, i + 1, o, xmax);\r
- 2, 3: CreateStringOption(xy.X, xy.Y - 2, i + 1, o, xmax);\r
+ 2, 3: o.edit:=TStringEdit.Create(self,pnOptions,o,xy.X, xy.Y - 2);\r
4: ;\r
- 5: CreateFileOption(xy.X, xy.Y - 2, i + 1, o, True, xmax);\r
- 6: if not FIsInput then CreateFileOption(xy.X, xy.Y - 2, i + 1, o, False, xmax);\r
+ 5: o.edit:=TFileEdit.Create(self,pnOptions,o,xy.X, xy.Y - 2, True, xmax);\r
+ 6: if not FIsInput then o.edit:=TFileEdit.Create(self,pnOptions,o,xy.X, xy.Y - 2, False, xmax);\r
end;\r
if (o.edit <> nil) then\r
o.edit.Enabled := False;\r
Result := Result + '=0';\r
Continue;\r
end;\r
- s := GetStrProp(o.edit, 'Text');\r
+ s := o.edit.value;\r
if (Pos(' ', s) <> 0) or (Pos('"', s) <> 0) or (Pos(',', s) <> 0) then\r
s := SysUtils.AnsiQuotedStr(s, '"');\r
Result := SysUtils.Format('%s=%s', [Result, s]);\r
if (o.edit <> nil) then\r
begin\r
o.chb.Checked := True;\r
- ud := FindUpDown(o.Edit);\r
- if (ud <> nil) then\r
- ud.Position := StrToInt(Value)\r
- else\r
- SetStrProp(o.edit, 'Text', Value);\r
+ o.Edit.Enabled:=True;\r
+ o.Edit.Value:=Value;\r
end\r
else if (o.otype = 4) then\r
o.chb.Checked := (value = '') or (value <> '0');\r
\r
procedure TfrmOptions.CheckBoxClicked(Sender: TObject);\r
var\r
- i: Integer;\r
- c: TComponent;\r
chb: TCheckBox;\r
- ctrl: TWinControl;\r
+ o : POption; \r
begin\r
if (Sender = nil) or not (Sender is TCheckBox) then Exit;\r
chb := Pointer(Sender);\r
-\r
- for i := 0 to ComponentCount - 1 do\r
- begin\r
- c := Components[i];\r
- if (c = chb) or not(c.InheritsFrom(TWinControl)) then Continue;\r
- if (c.Tag <> chb.Tag) then Continue;\r
- ctrl := Pointer(c);\r
- ctrl.Enabled := chb.Checked;\r
- end;\r
-end;\r
-\r
-procedure TfrmOptions.CreateStringOption(const x, y, tag: Integer; o: POption; xmax: Integer);\r
-var\r
- ed: TEdit;\r
-begin\r
- ed := TEdit.Create(Self);\r
- o.edit := ed;\r
-\r
- ed.Left := x;\r
- ed.Top := y;\r
- ed.Tag := tag;\r
- ed.Parent := pnOptions;\r
-\r
- if (o.def <> nil) then\r
- ed.Text := string(o.def);\r
+ o:=POption(FOpts.Objects[chb.tag]);\r
+ if not Assigned(o) Then exit;\r
+ if not Assigned(o^.edit) Then exit;\r
+ o^.edit.Enabled:=chb.Checked;\r
end;\r
\r
procedure TfrmOptions.CreateIntegerOption(const x, y, tag: Integer; o: POption; xmax: Integer);\r
begin\r
if (o.min <> nil) and (o.max <> nil) and\r
((StrToInt(o.max) - StrToInt(o.min)) < 32) then\r
- begin\r
- cb := TComboBox.Create(Self);\r
- o.edit := cb;\r
- cb.Left := x;\r
- cb.Top := y;\r
- cb.Tag := tag;\r
- if (cb.Left + cb.Width < xmax) then\r
- cb.Left := xmax - cb.Width;\r
- cb.Parent := pnOptions;\r
-\r
- for i := StrToInt(o.min) to StrToInt(o.max) do\r
- cb.Items.Add(IntToStr(i));\r
- if (o.def <> nil) then\r
- cb.Text := o.def\r
- else\r
- cb.ItemIndex := 0;\r
- Exit;\r
- end;\r
-\r
- ed := TEdit.Create(Self);\r
- o.edit := ed;\r
-\r
- ed.Left := x;\r
- ed.Top := y;\r
- ed.Tag := tag;\r
- ed.Parent := pnOptions;\r
-\r
- up := TUpDown.Create(Self);\r
- up.Parent := pnOptions;\r
-\r
- ed.Width := ed.Width - up.Width;\r
- up.Left := ed.Left + ed.Width;\r
- up.Top := ed.Top;\r
- if (o.min <> nil) then\r
- up.Min := StrToInt(o.min)\r
- else\r
- up.Min := -(MAXSHORT-1);\r
- if (o.max <> nil) then\r
- up.Max := StrToInt(o.max)\r
+ o.edit:=TIntegerSelectEdit.Create(self,pnOptions,o,x,y,xmax)\r
else\r
- up.Max := MAXSHORT;\r
- if (o.def <> nil) then\r
- up.Position := StrToInt(o.def);\r
- up.Associate := ed;\r
+ o.edit:=TIntegerEdit.Create(self,pnOptions,o,x,y);\r
end;\r
\r
procedure TfrmOptions.FormCreate(Sender: TObject);\r
WinOpenURL(readme_html_path + '#fmt_' + FFormat);\r
end;\r
\r
-procedure TfrmOptions.CreateFileOption(const x, y, tag: Integer;\r
- o: POption; IsInput: Boolean; xmax: Integer = -1);\r
-var\r
- ed: TEdit;\r
- btn: TSpeedButton;\r
-begin\r
- ed := TEdit.Create(Self);\r
- o.edit := ed;\r
-\r
- ed.Left := x;\r
- ed.Top := y;\r
- ed.Tag := tag;\r
- ed.Parent := pnOptions;\r
-\r
- btn := TSpeedButton.Create(Self);\r
- btn.Parent := pnOptions;\r
- btn.Tag := tag;\r
- ed.Width := ed.Width - btn.Width;\r
- btn.Left := ed.Left + ed.Width;\r
- btn.Top := ed.top;\r
-\r
- if IsInput then\r
- begin\r
- btn.OnClick := Self.OptionOpenFile;\r
- frmMain.ImageList1.GetBitmap(15, btn.Glyph);\r
- end\r
- else\r
- begin\r
- btn.OnClick := Self.OptionSaveFile;\r
- frmMain.ImageList1.GetBitmap(17, btn.Glyph);\r
- end;\r
-end;\r
-\r
-procedure TfrmOptions.OptionOpenFile(Sender: TObject);\r
-var\r
- c: TControl;\r
- i: Integer;\r
- o: POption;\r
- d: TOpenDialog;\r
-begin\r
- if (Sender = nil) or not(Sender is TControl) then Exit;\r
-\r
- c := Pointer(Sender);\r
-\r
- for i := 0 to FOpts.Count - 1 do\r
- begin\r
- o := Pointer(FOpts.Objects[i]);\r
- if (o.chb = nil) or (o.chb.Tag <> c.Tag) then Continue;\r
-\r
- d := TOpenDialog.Create(Self);\r
- try\r
- d.FileName := GetStrProp(o.edit, 'Text');\r
- if d.Execute then\r
- SetStrProp(o.edit, 'Text', d.FileName);\r
- finally\r
- d.Free;\r
- end;\r
- end;\r
-end;\r
-\r
-procedure TfrmOptions.OptionSaveFile(Sender: TObject);\r
-var\r
- c: TControl;\r
- i: Integer;\r
- o: POption;\r
- d: TSaveDialog;\r
-begin\r
- if (Sender = nil) or not(Sender is TControl) then Exit;\r
- \r
- c := Pointer(Sender);\r
-\r
- for i := 0 to FOpts.Count - 1 do\r
- begin\r
- o := Pointer(FOpts.Objects[i]);\r
- if (o.chb = nil) or (o.chb.Tag <> c.Tag) then Continue;\r
-\r
- d := TSaveDialog.Create(Self);\r
- try\r
- d.FileName := GetStrProp(o.edit, 'Text');\r
- if d.Execute then\r
- SetStrProp(o.edit, 'Text', d.FileName);\r
- finally\r
- d.Free;\r
- end;\r
- end;\r
-end;\r
-\r
function TfrmOptions.ParseOptsLine(const Line: string; List: TStrings): Integer;\r
var\r
s, name, val: string;\r
else\r
value := '0';\r
end\r
- else value := GetStrProp(o.edit, 'Text');\r
+ else value := o.edit.Value;\r
if (o.gbdef <> nil) and (StrPas(o.gbdef) = value) then\r
r.WriteString(key, '(default)')\r
else\r
begin\r
o.chb.Checked := True;\r
if (value <> '(default)') then\r
- begin\r
- if HasUpDown(TEdit(o.edit), u) then\r
- begin\r
- if (o.def <> nil) then\r
- v := StrToIntDef(o.def, 0) else\r
- v := 0;\r
- u.Position := StrToIntDef(value, v);\r
- end\r
- else\r
- SetStrProp(o.edit, 'Text', value);\r
- end;\r
+ o.edit.Value := value;\r
o.edit.Enabled := True;\r
end;\r
end;\r
StoreBounds('options_form', Self);\r
end;\r
\r
+destructor TfrmOptions.Destroy;\r
+Var\r
+ I : Integer;\r
+ o: POption;\r
+begin\r
+ try\r
+ for i := 0 to FOpts.Count - 1 do\r
+ begin\r
+ o := Pointer(FOpts.Objects[i]);\r
+ if (Assigned(o.edit)) then begin\r
+ o.edit.Free;\r
+ o.edit := nil;\r
+ end;\r
+ end;\r
+ finally\r
+ inherited;\r
+ end;\r
+end;\r
+\r
end.\r